<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('variant_attribute_values', function (Blueprint $table) {
            // 基础字段
            $table->id()->comment('属性值ID');
            $table->foreignId('variant_id')->constrained('product_variants')->onDelete('cascade')->comment('关联变体ID');
            $table->foreignId('attribute_id')->constrained('variant_attributes')->onDelete('cascade')->comment('关联属性ID');
            
            // 属性值字段
            $table->string('value')->comment('属性值，存储实际值，如"red"、"128GB"');
            $table->string('display_value')->nullable()->comment('显示值，用于前端显示，如"深空黑色"、"128GB存储"');
            $table->string('color_code')->nullable()->comment('颜色代码，用于颜色属性，如"#000000"');
            
            // 排序和元数据
            $table->integer('sort_order')->default(0)->comment('排序权重，数值越大排序越靠前');
            $table->json('meta_data')->nullable()->comment('扩展元数据，JSON格式，可存储图片、规格等额外信息');
            
            // 时间戳
            $table->timestamps();
            
            // 索引优化
            $table->index(['variant_id', 'attribute_id'], 'idx_value_variant_attr')->comment('变体和属性组合索引，用于查询变体的属性值');
            $table->index(['attribute_id', 'value'], 'idx_value_attr_value')->comment('属性和值组合索引，用于按属性值筛选');
            $table->index(['variant_id', 'sort_order'], 'idx_value_variant_sort')->comment('变体和排序组合索引，用于属性值排序');
            $table->index('color_code', 'idx_value_color_code')->comment('颜色代码索引，用于颜色筛选');
            
            // 唯一约束：同一变体不能有重复的属性
            $table->unique(['variant_id', 'attribute_id'], 'uk_variant_attribute')->comment('变体和属性唯一约束，确保每个变体的每个属性只有一个值');
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('variant_attribute_values');
    }
};
